package com.xbongbong.pro.statistic.service;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.domain.entity.ChartLimitEntity;
import com.xbongbong.pro.statistic.enums.ChartLimitTypeEnum;
import com.xbongbong.pro.statistic.pojo.SlaveSourcePojo;
import com.xbongbong.pro.statistic.pojo.dto.BiLimitDTO;

import java.util.List;

/**
 * @ClassName ChartLimitService
 * @Description 图表限制
 * @Author mengna.Deng
 * @Date 2021/8/23 14:41
 * @Version 1.0
 */
public interface ChartLimitService {

     ChartLimitEntity getByType(Integer type, String corpid);

    ChartLimitEntity getByAlias(String alias, String corpid);
    /**
     * 切换数据源
     */
    boolean  switchCK(String corpid, Boolean flag) throws XbbException;

    /**
     * 获取是否需要切换数据源
     * @return
     */
    boolean  getCkFlag();

    /**
     * 获取数量是否需要特殊处理
     * @param corpid
     * @param redisKey
     * @param chartDataSourceLimit
     * @return
     */
    boolean  getChartLimtFlag(String corpid, String redisKey, ChartLimitTypeEnum chartDataSourceLimit);

    /**
     * 设置需要特殊处理的数量
     * @param corpid
     * @param flag
     * @param size
     * @return
     */
    boolean  setChartLimtFlag(String corpid, Boolean flag,int size);
    /**
     * 设置需要特殊处理的数量
     * @param biLimitDTO
     * @return boolean
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    boolean  setBiChartLimt(BiLimitDTO biLimitDTO);
    /**
     * 获取限制数量
     * @param corpid 公司id
     * @param type {@link ChartLimitTypeEnum}
     * @param defaultLimit 默认限制数量
     * @return int
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    int chartLimitNum(String corpid, int type, int defaultLimit);

    /**
     * 验证图表使用表单数量限制
     * @param corpid 公司唯一表示
     * @param driverSource 主表数据源
     * @param slaveSources 从表数据源
     * @param single 0-多表，1-单表，2-数据集
     * @throws XbbException
     */
    void chartDataLimit(String corpid, JSONObject driverSource, JSONArray slaveSources,Integer single) throws XbbException;

    /**
     * 区分不同场景来获取数据源实体
     *
     * @param corpid 公司唯一标识
     * @param single 0-多表 1-单表 2-数据集
     * @param driverSource 主表实体
     * @return java.util.List<com.xbongbong.pro.statistic.pojo.SlaveSourcePojo>
     * @author zyy
     * @date 2022/11/2
     * @version v1.0
     * @throws XbbException
     */
    List<SlaveSourcePojo> getSelectList(String corpid, Integer single, JSONObject driverSource) throws XbbException;

    /**
     * 区分不同场景来获取表单的最大数据量
     *
     * @param corpid 公司唯一标识
     * @param selectList 表单实体数组
     * @param single 0-多表 1-单表 2-数据集
     * @param slaveSources 从表实体
     * @return java.lang.Integer
     * @author zyy
     * @date 2022/11/2
     * @version v1.0
     * @throws XbbException
     */
    Integer getChartDataLimitNum(String corpid,List<SlaveSourcePojo> selectList,Integer single, JSONArray slaveSources) throws XbbException;
}
